#ifndef __SBPACKETS_HPP__
#define	__SBPACKETS_HPP__

#define		ENTITY_CHAR_MAX		16
#define		NAME_CHAR_MAX		32
#define		BEHAVIOR_CHAR_MAX	64

#include "BasicPacket.hpp"
#include "system/event/generikevents/GenerikEvents.hpp"

	namespace network
	{
		namespace packet
		{
			class RequestNeedGenerikAdd :
				public Event::EventNeedGenerikAdd,
				public buffer::BasicBuffer,
				public BasicPacket
            {

            public:

				RequestNeedGenerikAdd();
				RequestNeedGenerikAdd( boost::uint8_t _type, boost::uint32_t _objectId, boost::uint8_t _phase, boost::uint8_t _age, irr::core::vector3df _position );
			
				RequestNeedGenerikAdd(const RequestNeedGenerikAdd& _copy);
                RequestNeedGenerikAdd(const buffer::BasicBuffer& _copy);
                RequestNeedGenerikAdd(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				virtual ~RequestNeedGenerikAdd(){}

				virtual void handle( session_ptr _session, buffer::BasicBuffer& _packet);
            };

			class RequestNeedGenerikRemove :
				public Event::EventNeedGenerikRemove,
				public buffer::BasicBuffer,
				public BasicPacket
            {

            public:

				RequestNeedGenerikRemove();
				RequestNeedGenerikRemove( boost::uint8_t _type, boost::uint32_t _idToRemove );
		
				RequestNeedGenerikRemove( const RequestNeedGenerikRemove& _copy );
				RequestNeedGenerikRemove(const buffer::BasicBuffer& _copy);
                RequestNeedGenerikRemove(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				virtual ~RequestNeedGenerikRemove(){}

				virtual void handle( session_ptr _session, buffer::BasicBuffer& _packet);
            };

			class RequestNeedGenerikScentAdd :
				public Event::EventNeedGenerikScentAdd,
				public buffer::BasicBuffer,
				public BasicPacket
            {

            public:

				RequestNeedGenerikScentAdd();
				RequestNeedGenerikScentAdd( boost::uint8_t _type, float _posX, float _posY, float _posZ, boost::uint32_t _numToAdd );
		
				RequestNeedGenerikScentAdd( const RequestNeedGenerikScentAdd& _copy );
				RequestNeedGenerikScentAdd(const buffer::BasicBuffer& _copy);
                RequestNeedGenerikScentAdd(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				
				virtual ~RequestNeedGenerikScentAdd(){}

				virtual void handle( session_ptr _session, buffer::BasicBuffer& _packet);
            };

			class RequestGeneriks :
				public Event::EventRequestGeneriks,
				public network::buffer::BasicBuffer,
				public network::packet::BasicPacket
            {

            public:

				RequestGeneriks();
		
				RequestGeneriks( const RequestGeneriks& _copy );
				RequestGeneriks(const network::buffer::BasicBuffer& _copy);
                RequestGeneriks(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				virtual ~RequestGeneriks(){}

				virtual void handle( network::session_ptr _session, network::buffer::BasicBuffer& _packet);
            };

			/*class RequestNeedGenerikScentRemove :
				public Event::NeedGenerikScentRemove,
				public buffer::WeaselBuffer,
				public BasicPacket
            {

            public:

				RequestNeedGenerikScentRemove();
				RequestNeedGenerikScentRemove( boost::uint8_t _type, float _posX, float _posY, float _posZ, boost::uint32_t _numToRemove );
			
				RequestNeedGenerikScentRemove( const RequestNeedGenerikScentRemove& _copy );
				RequestNeedGenerikScentRemove(const we::network::buffer::WeaselBuffer& _copy);
                RequestNeedGenerikScentRemove(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				virtual void handle(we::network::session_ptr _session, we::network::buffer::WeaselBuffer& _packet);
            };*/

			class RequestGrow :
				public Event::EventGrow,
				public buffer::BasicBuffer,
				public BasicPacket
            {

            public:

				RequestGrow();
				RequestGrow( boost::uint32_t _idToChange, boost::uint32_t _newAge );
		
				RequestGrow( const RequestGrow& _copy );
				RequestGrow(const buffer::BasicBuffer& _copy);
                RequestGrow(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);

				virtual ~RequestGrow(){}

				virtual void handle( session_ptr _session, buffer::BasicBuffer& _packet);
            };

			class RequestChangePosition :
				public Event::EventChangePosition,
				public buffer::BasicBuffer,
				public BasicPacket
            {

            public:

				RequestChangePosition();
				RequestChangePosition(boost::uint32_t _idToChange, const irr::core::vector3df& _newPos );
		
				RequestChangePosition( const RequestChangePosition& _copy );
				RequestChangePosition(const buffer::BasicBuffer& _copy);
                RequestChangePosition(boost::shared_ptr< std::vector< unsigned char > > _receive_buffer);
				
				virtual ~RequestChangePosition(){}

				virtual void handle( session_ptr _session, buffer::BasicBuffer& _packet);
            };

		}	//	namespace packet
	}	//	//	namespace network

#endif	//	__SBPACKETS_HPP__